package com.cn.yunhe.struts.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import com.alibaba.fastjson.JSONObject;
import com.cn.yunhe.struts.modle.GoodsModel;
import com.opensymphony.xwork2.ActionSupport;

public class GoodsController extends ActionSupport {
private static final long serialVersionUID = 1L;
	
	// 将会被Struts2序列化为JSON字符串的对象
	private Map<String, Object> dataMap;

	/**
	 * 构造方法
	 */
	public GoodsController() {
		// 初始化Map对象
		dataMap = new HashMap<String, Object>();
	}

	public String getGoods() {
		
        // dataMap中的数据将会被Struts2转换成JSON字符串，所以这里要先清空其中的数据  
        dataMap.clear();  
        GoodsModel goods = new GoodsModel();  
        goods.setGoodsname("华为mate9");  
        goods.setFromaddress("深圳九龙区");
        dataMap.put("goods", goods);  
        // 放入一个是否操作成功的标识  
        dataMap.put("success", true); 
        
        return SUCCESS;
        
	}
	
	
	 /** 
     * 测试通过action以视图方式返回JSON数据 
     * @return 
     */  
    public String testByJSP() {  
    	GoodsModel goods = new GoodsModel();  
        goods.setGoodsname("华为mate9");  
        goods.setFromaddress("深圳九龙区");  

        JSONObject jsonObject=new JSONObject(); 
        jsonObject.put("user", goods);  
        jsonObject.put("success", true);  
        //这里在request对象中放了一个data，所以struts的result配置中不能有type="redirect"  
        ServletActionContext.getRequest().setAttribute("data", jsonObject.toString());  
        return SUCCESS;  
    }; 
	
    /** 
     * 通过action是以传统方式返回JSON数据 
     * @throws IOException 
     */  
    public void doAction() throws IOException{  
        HttpServletResponse response=ServletActionContext.getResponse();  
        //以下代码从JSON.java中拷过来的  
        response.setContentType("text/html");  
        PrintWriter out;  
        out = response.getWriter();  
        //将要被返回到客户端的对象  
        
        GoodsModel goods = new GoodsModel();  
        goods.setGoodsname("华为mate9");  
        goods.setFromaddress("深圳九龙区"); 
        
        JSONObject json=new JSONObject();  
        json.put("success", true);  
        json.put("user", goods);  
        out.println(json.toString());  
//      因为JSON数据在传递过程中是以普通字符串形式传递的，所以我们也可以手动拼接符合JSON语法规范的字符串输出到客户端  
//      以下这两句的作用与38-46行代码的作用是一样的，将向客户端返回一个User对象，和一个success字段  
//      String jsonString="{\"user\":{\"id\":\"123\",\"name\":\"JSONActionGeneral\",\"say\":\"Hello , i am a action to print a json!\",\"password\":\"JSON\"},\"success\":true}";  
//      out.println(jsonString);  
        out.flush();  
        out.close();  
    }  
    
	/** 
     * Struts2序列化指定属性时，必须有该属性的getter方法，
     * 实际上，如果没有属性，而只有getter方法也是可以的 
     * @return MAP
     */  
    public Map<String, Object> getDataMap() {  
        return dataMap;  
    }  

}
